package com.ytzq.base.dict;

import java.sql.SQLException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.ytzq.base.constants.CONFIG;
import com.ytzq.base.constants.LOG_TYPE;
import com.ytzq.base.jdbc.DataRow;
import com.ytzq.base.log.Logger;

/**
 * 数据字典类(取自数据库)
 * @author 门士松 20130822
 * @version 1.0
 */
public  class Dict extends HashMap<String,Map<String,String>>  {
	
	private static final long serialVersionUID = 1L;
	//自己的实例
	public static Dict dict; 
	//日志
	private static Logger logger = Logger.getLogger(Dict.class);
	/**
	 * 通过数据字典的类型和值获得数据字典名称
	 * @param type 分类
	 * @param value 值
	 * @return
	 */
	public static String getName(String type,String value){
		if(dict!=null && dict.get(type)!=null){
			return dict.get(type).get(value);
		}else{
			return null;
		}
	}
	/**
	 * 初始化：读取数据库中的字典信息
	 */
	public static void init(){
		//初始化一个新实例
		if(dict==null){
			dict = new Dict();
		}else{
			dict.clear();
		}
		//从数据库查询数据字典信息
		DictService dictService = new DictService();
		
		try {
			List<DataRow> list = dictService.selectAll();
			String details = "";
			for(DataRow dataRow : list){
				details=details+dataRow.toString()+"\n";
			}
	    	logger.debug(LOG_TYPE.SYSTEM, "从数据库读取数据字典成功,内容为:", details);	
			//添加数据
			if(list!=null){
				for(DataRow dataRow:list){
					Map<String,String> map = null;
					if(dict.get(dataRow.getString("type"))==null){
						map = new HashMap<String,String>();
						map.put(dataRow.getString("value"),dataRow.getString("name"));
						dict.put(dataRow.getString("type"), map);
					}else{
						map = dict.get(dataRow.getString("type"));
						map.put(dataRow.getString("value"),dataRow.getString("name"));
					}
				}
			}	    	
		} catch (SQLException e) {
			e.printStackTrace();
			logger.error(LOG_TYPE.SYSTEM,e);
		}
	}
	
	/**
	 * 根据错误代码 获得错误描述
	 */
	public static String getErrorInfo(String error_code) {	
		return getName(CONFIG.ERROR_CODE,error_code);
	}
}
